<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/modsupport.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/modsupport.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> 
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfTU9EU1VQUE9SVF9IXzA_"><span class="b">Py_MODSUPPORT_H</span></a>
<a name="3" /><span class="True">       3:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfTU9EU1VQUE9SVF9IXzA_"><span class="b">Py_MODSUPPORT_H</span></a>
<a name="4" /><span class="False">       4:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="5" /><span class="False">       5:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">endif</span>
<a name="7" /><span class="True">       7:</span> 
<a name="8" /><span class="True">       8:</span> <span class="k">/* Module support interface */</span>
<a name="9" /><span class="True">       9:</span> 
<a name="10" /><span class="True">      10:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">stdarg</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="11" /><span class="True">      11:</span> 
<a name="12" /><span class="True">      12:</span> <span class="k">/* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier</span>
<a name="13" /><span class="True">      13:</span> <span class="k">   to mean Py_ssize_t */</span>
<a name="14" /><span class="False">      14:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">PY_SSIZE_T_CLEAN</span>
<a name="15" /><span class="False">      15:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PyArg_Parse</span>                     <span class="b">_PyArg_Parse_SizeT</span>
<a name="16" /><span class="False">      16:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PyArg_ParseTuple</span>                <span class="b">_PyArg_ParseTuple_SizeT</span>
<a name="17" /><span class="False">      17:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PyArg_ParseTupleAndKeywords</span>     <span class="b">_PyArg_ParseTupleAndKeywords_SizeT</span>
<a name="18" /><span class="False">      18:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PyArg_VaParse</span>                   <span class="b">_PyArg_VaParse_SizeT</span>
<a name="19" /><span class="False">      19:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PyArg_VaParseTupleAndKeywords</span>   <span class="b">_PyArg_VaParseTupleAndKeywords_SizeT</span>
<a name="20" /><span class="False">      20:</span> <span class="f">#</span><span class="n">define</span> <span class="b">Py_BuildValue</span>                   <span class="b">_Py_BuildValue_SizeT</span>
<a name="21" /><span class="False">      21:</span> <span class="f">#</span><span class="n">define</span> <span class="b">Py_VaBuildValue</span>                 <span class="b">_Py_VaBuildValue_SizeT</span>
<a name="22" /><span class="True">      22:</span> <span class="f">#</span><span class="n">else</span>
<a name="23" /><span class="True">      23:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="24" /><span class="True">      24:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_Py_VaBuildValue_SizeT</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="b">va_list</span><span class="f">)</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_LIMITED_API */</span>
<a name="26" /><span class="True">      26:</span> <span class="f">#</span><span class="n">endif</span>
<a name="27" /><span class="True">      27:</span> 
<a name="28" /><span class="True">      28:</span> <span class="k">/* Due to a glitch in 3.2, the _SizeT versions weren&apos;t exported from the DLL. */</span>
<a name="29" /><span class="True">      29:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">PY_SSIZE_T_CLEAN</span><span class="f">)</span> <span class="f">||</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">Py_LIMITED_API</span><span class="f">)</span> <span class="f">||</span> <span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&gt;=</span> <span class="c">0x03030000</span>
<a name="30" /><span class="True">      30:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_Parse</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_ParseTuple</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="32" /><span class="True">      32:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_ParseTupleAndKeywords</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span>
<a name="33" /><span class="True">      33:</span>                                                   <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="m">char</span> <span class="f">*</span><span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_VaParse</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="b">va_list</span><span class="f">)</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_VaParseTupleAndKeywords</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span>
<a name="36" /><span class="True">      36:</span>                                                   <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="m">char</span> <span class="f">*</span><span class="f">*</span><span class="f">,</span> <span class="b">va_list</span><span class="f">)</span><span class="f">;</span>
<a name="37" /><span class="True">      37:</span> <span class="f">#</span><span class="n">endif</span>
<a name="38" /><span class="True">      38:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_ValidateKeywordArguments</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="39" /><span class="True">      39:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyArg_UnpackTuple</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="b">Py_ssize_t</span><span class="f">,</span> <span class="b">Py_ssize_t</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">Py_BuildValue</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="41" /><span class="True">      41:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_Py_BuildValue_SizeT</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="42" /><span class="True">      42:</span> 
<a name="43" /><span class="True">      43:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="44" /><span class="True">      44:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyArg_NoKeywords</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">funcname</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">kw</span><span class="f">)</span><span class="f">;</span>
<a name="45" /><span class="True">      45:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyArg_NoPositional</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">funcname</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">args</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> <span class="f">#</span><span class="n">endif</span>
<a name="47" /><span class="True">      47:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">Py_VaBuildValue</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="b">va_list</span><span class="f">)</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span> 
<a name="49" /><span class="True">      49:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="50" /><span class="True">      50:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">_PyArg_Parser</span> <span class="f">{</span>
<a name="51" /><span class="True">      51:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">format</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span> <span class="m">const</span> <span class="f">*</span><span class="b">keywords</span><span class="f">;</span>
<a name="53" /><span class="True">      53:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">fname</span><span class="f">;</span>
<a name="54" /><span class="True">      54:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">custom_msg</span><span class="f">;</span>
<a name="55" /><span class="True">      55:</span>     <span class="m">int</span> <span class="b">pos</span><span class="f">;</span>            <span class="k">/* number of positional-only arguments */</span>
<a name="56" /><span class="True">      56:</span>     <span class="m">int</span> <span class="b">min</span><span class="f">;</span>            <span class="k">/* minimal number of arguments */</span>
<a name="57" /><span class="True">      57:</span>     <span class="m">int</span> <span class="b">max</span><span class="f">;</span>            <span class="k">/* maximal number of positional arguments */</span>
<a name="58" /><span class="True">      58:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">kwtuple</span><span class="f">;</span>  <span class="k">/* tuple of keyword parameter names */</span>
<a name="59" /><span class="True">      59:</span>     <span class="m">struct</span> <span class="b">_PyArg_Parser</span> <span class="f">*</span><span class="b">next</span><span class="f">;</span>
<a name="60" /><span class="True">      60:</span> <span class="f">}</span> <span class="b">_PyArg_Parser</span><span class="f">;</span>
<a name="61" /><span class="False">      61:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">PY_SSIZE_T_CLEAN</span>
<a name="62" /><span class="False">      62:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_PyArg_ParseTupleAndKeywordsFast</span>  <span class="b">_PyArg_ParseTupleAndKeywordsFast_SizeT</span>
<a name="63" /><span class="False">      63:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_PyArg_ParseStack</span>  <span class="b">_PyArg_ParseStack_SizeT</span>
<a name="64" /><span class="False">      64:</span> <span class="f">#</span><span class="n">define</span> <span class="b">_PyArg_VaParseTupleAndKeywordsFast</span>  <span class="b">_PyArg_VaParseTupleAndKeywordsFast_SizeT</span>
<a name="65" /><span class="True">      65:</span> <span class="f">#</span><span class="n">endif</span>
<a name="66" /><span class="True">      66:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyArg_ParseTupleAndKeywordsFast</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span>
<a name="67" /><span class="True">      67:</span>                                                  <span class="m">struct</span> <span class="b">_PyArg_Parser</span> <span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="68" /><span class="True">      68:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyArg_ParseStack</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">args</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="b">nargs</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">kwnames</span><span class="f">,</span>
<a name="69" /><span class="True">      69:</span>                                   <span class="m">struct</span> <span class="b">_PyArg_Parser</span> <span class="f">*</span><span class="f">,</span> <span class="f">...</span><span class="f">)</span><span class="f">;</span>
<a name="70" /><span class="True">      70:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyArg_VaParseTupleAndKeywordsFast</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span>
<a name="71" /><span class="True">      71:</span>                                                    <span class="m">struct</span> <span class="b">_PyArg_Parser</span> <span class="f">*</span><span class="f">,</span> <span class="b">va_list</span><span class="f">)</span><span class="f">;</span>
<a name="72" /><span class="True">      72:</span> <span class="m">void</span> <span class="b">_PyArg_Fini</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="73" /><span class="True">      73:</span> <span class="f">#</span><span class="n">endif</span>
<a name="74" /><span class="True">      74:</span> 
<a name="75" /><span class="True">      75:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyModule_AddObject</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="76" /><span class="True">      76:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyModule_AddIntConstant</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="m">long</span><span class="f">)</span><span class="f">;</span>
<a name="77" /><span class="True">      77:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyModule_AddStringConstant</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="78" /><span class="True">      78:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlNb2R1bGVfQWRkSW50TWFjcm9fMA__"><span class="b">PyModule_AddIntMacro</span></a><span class="f">(</span><span class="b">m</span><span class="f">,</span> <span class="b">c</span><span class="f">)</span> <span class="b">PyModule_AddIntConstant</span><span class="f">(</span><span class="b">m</span><span class="f">,</span> <span class="f">#</span><span class="b">c</span><span class="f">,</span> <span class="b">c</span><span class="f">)</span>
<a name="79" /><span class="True">      79:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlNb2R1bGVfQWRkU3RyaW5nTWFjcm9fMA__"><span class="b">PyModule_AddStringMacro</span></a><span class="f">(</span><span class="b">m</span><span class="f">,</span> <span class="b">c</span><span class="f">)</span> <span class="b">PyModule_AddStringConstant</span><span class="f">(</span><span class="b">m</span><span class="f">,</span> <span class="f">#</span><span class="b">c</span><span class="f">,</span> <span class="b">c</span><span class="f">)</span>
<a name="80" /><span class="True">      80:</span> 
<a name="81" /><span class="True">      81:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">Py_LIMITED_API</span><span class="f">)</span> <span class="f">||</span> <span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&gt;=</span> <span class="c">0x03050000</span>
<a name="82" /><span class="True">      82:</span> <span class="k">/* New in 3.5 */</span>
<a name="83" /><span class="True">      83:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyModule_SetDocString</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyModule_AddFunctions</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">,</span> <span class="b">PyMethodDef</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="85" /><span class="True">      85:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyModule_ExecDef</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">module</span><span class="f">,</span> <span class="b">PyModuleDef</span> <span class="f">*</span><span class="b">def</span><span class="f">)</span><span class="f">;</span>
<a name="86" /><span class="True">      86:</span> <span class="f">#</span><span class="n">endif</span>
<a name="87" /><span class="True">      87:</span> 
<a name="88" /><span class="True">      88:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfQ0xFQU5VUF9TVVBQT1JURURfMA__"><span class="b">Py_CLEANUP_SUPPORTED</span></a> <span class="c">0x20000</span>
<a name="89" /><span class="True">      89:</span> 
<a name="90" /><span class="True">      90:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UFlUSE9OX0FQSV9WRVJTSU9OXzA_"><span class="b">PYTHON_API_VERSION</span></a> <span class="c">1013</span>
<a name="91" /><span class="True">      91:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UFlUSE9OX0FQSV9TVFJJTkdfMA__"><span class="b">PYTHON_API_STRING</span></a> <span class="e">&quot;1013&quot;</span>
<a name="92" /><span class="True">      92:</span> <span class="k">/* The API version is maintained (independently from the Python version)</span>
<a name="93" /><span class="True">      93:</span> <span class="k">   so we can detect mismatches between the interpreter and dynamically</span>
<a name="94" /><span class="True">      94:</span> <span class="k">   loaded modules.  These are diagnosed by an error message but</span>
<a name="95" /><span class="True">      95:</span> <span class="k">   the module is still loaded (because the mismatch can only be tested</span>
<a name="96" /><span class="True">      96:</span> <span class="k">   after loading the module).  The error message is intended to</span>
<a name="97" /><span class="True">      97:</span> <span class="k">   explain the core dump a few seconds later.</span>
<a name="98" /><span class="True">      98:</span> <span class="k"></span>
<a name="99" /><span class="True">      99:</span> <span class="k">   The symbol PYTHON_API_STRING defines the same value as a string</span>
<a name="100" /><span class="True">     100:</span> <span class="k">   literal.  *** PLEASE MAKE SURE THE DEFINITIONS MATCH. ***</span>
<a name="101" /><span class="True">     101:</span> <span class="k"></span>
<a name="102" /><span class="True">     102:</span> <span class="k">   Please add a line or two to the top of this log for each API</span>
<a name="103" /><span class="True">     103:</span> <span class="k">   version change:</span>
<a name="104" /><span class="True">     104:</span> <span class="k"></span>
<a name="105" /><span class="True">     105:</span> <span class="k">   22-Feb-2006  MvL     1013    PEP 353 - long indices for sequence lengths</span>
<a name="106" /><span class="True">     106:</span> <span class="k"></span>
<a name="107" /><span class="True">     107:</span> <span class="k">   19-Aug-2002  GvR     1012    Changes to string object struct for</span>
<a name="108" /><span class="True">     108:</span> <span class="k">                                interning changes, saving 3 bytes.</span>
<a name="109" /><span class="True">     109:</span> <span class="k"></span>
<a name="110" /><span class="True">     110:</span> <span class="k">   17-Jul-2001  GvR     1011    Descr-branch, just to be on the safe side</span>
<a name="111" /><span class="True">     111:</span> <span class="k"></span>
<a name="112" /><span class="True">     112:</span> <span class="k">   25-Jan-2001  FLD     1010    Parameters added to PyCode_New() and</span>
<a name="113" /><span class="True">     113:</span> <span class="k">                                PyFrame_New(); Python 2.1a2</span>
<a name="114" /><span class="True">     114:</span> <span class="k"></span>
<a name="115" /><span class="True">     115:</span> <span class="k">   14-Mar-2000  GvR     1009    Unicode API added</span>
<a name="116" /><span class="True">     116:</span> <span class="k"></span>
<a name="117" /><span class="True">     117:</span> <span class="k">   3-Jan-1999   GvR     1007    Decided to change back!  (Don&apos;t reuse 1008!)</span>
<a name="118" /><span class="True">     118:</span> <span class="k"></span>
<a name="119" /><span class="True">     119:</span> <span class="k">   3-Dec-1998   GvR     1008    Python 1.5.2b1</span>
<a name="120" /><span class="True">     120:</span> <span class="k"></span>
<a name="121" /><span class="True">     121:</span> <span class="k">   18-Jan-1997  GvR     1007    string interning and other speedups</span>
<a name="122" /><span class="True">     122:</span> <span class="k"></span>
<a name="123" /><span class="True">     123:</span> <span class="k">   11-Oct-1996  GvR     renamed Py_Ellipses to Py_Ellipsis :-(</span>
<a name="124" /><span class="True">     124:</span> <span class="k"></span>
<a name="125" /><span class="True">     125:</span> <span class="k">   30-Jul-1996  GvR     Slice and ellipses syntax added</span>
<a name="126" /><span class="True">     126:</span> <span class="k"></span>
<a name="127" /><span class="True">     127:</span> <span class="k">   23-Jul-1996  GvR     For 1.4 -- better safe than sorry this time :-)</span>
<a name="128" /><span class="True">     128:</span> <span class="k"></span>
<a name="129" /><span class="True">     129:</span> <span class="k">   7-Nov-1995   GvR     Keyword arguments (should&apos;ve been done at 1.3 :-( )</span>
<a name="130" /><span class="True">     130:</span> <span class="k"></span>
<a name="131" /><span class="True">     131:</span> <span class="k">   10-Jan-1995  GvR     Renamed globals to new naming scheme</span>
<a name="132" /><span class="True">     132:</span> <span class="k"></span>
<a name="133" /><span class="True">     133:</span> <span class="k">   9-Jan-1995   GvR     Initial version (incompatible with older API)</span>
<a name="134" /><span class="True">     134:</span> <span class="k">*/</span>
<a name="135" /><span class="True">     135:</span> 
<a name="136" /><span class="True">     136:</span> <span class="k">/* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of</span>
<a name="137" /><span class="True">     137:</span> <span class="k">   Python 3, it will stay at the value of 3; changes to the limited API</span>
<a name="138" /><span class="True">     138:</span> <span class="k">   must be performed in a strictly backwards-compatible manner. */</span>
<a name="139" /><span class="True">     139:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UFlUSE9OX0FCSV9WRVJTSU9OXzA_"><span class="b">PYTHON_ABI_VERSION</span></a> <span class="c">3</span>
<a name="140" /><span class="True">     140:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UFlUSE9OX0FCSV9TVFJJTkdfMA__"><span class="b">PYTHON_ABI_STRING</span></a> <span class="e">&quot;3&quot;</span>
<a name="141" /><span class="True">     141:</span> 
<a name="142" /><span class="True">     142:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="macros_ref.html#_UHlfVFJBQ0VfUkVGU18w"><span class="b">Py_TRACE_REFS</span></a>
<a name="143" /><span class="True">     143:</span>  <span class="k">/* When we are tracing reference counts, rename module creation functions so</span>
<a name="144" /><span class="True">     144:</span> <span class="k">    modules compiled with incompatible settings will generate a</span>
<a name="145" /><span class="True">     145:</span> <span class="k">    link-time error. */</span>
<a name="146" /><span class="True">     146:</span>  <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_UHlNb2R1bGVfQ3JlYXRlMl8w"><span class="b">PyModule_Create2</span></a> <span class="b">PyModule_Create2TraceRefs</span>
<a name="147" /><span class="True">     147:</span>  <span class="f">#</span><span class="n">define</span> <a href="macros_ref.html#_UHlNb2R1bGVfRnJvbURlZkFuZFNwZWMyXzA_"><span class="b">PyModule_FromDefAndSpec2</span></a> <span class="b">PyModule_FromDefAndSpec2TraceRefs</span>
<a name="148" /><span class="True">     148:</span> <span class="f">#</span><span class="n">endif</span>
<a name="149" /><span class="True">     149:</span> 
<a name="150" /><span class="True">     150:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <a href="macros_ref.html#_UHlNb2R1bGVfQ3JlYXRlMl8w"><span class="b">PyModule_Create2</span></a><span class="f">(</span><span class="m">struct</span> <span class="b">PyModuleDef</span><span class="f">*</span><span class="f">,</span>
<a name="151" /><span class="True">     151:</span>                                      <span class="m">int</span> <span class="b">apiver</span><span class="f">)</span><span class="f">;</span>
<a name="152" /><span class="True">     152:</span> 
<a name="153" /><span class="False">     153:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">Py_LIMITED_API</span>
<a name="154" /><span class="False">     154:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlNb2R1bGVfQ3JlYXRlXzA_"><span class="b">PyModule_Create</span></a><span class="f">(</span><span class="b">module</span><span class="f">)</span> \
<a name="155" /><span class="False">     155:</span>         <a href="macros_ref.html#_UHlNb2R1bGVfQ3JlYXRlMl8w"><span class="b">PyModule_Create2</span></a><span class="f">(</span><span class="b">module</span><span class="f">,</span> <a href="macros_noref.html#_UFlUSE9OX0FCSV9WRVJTSU9OXzA_"><span class="b">PYTHON_ABI_VERSION</span></a><span class="f">)</span>
<a name="156" /><span class="True">     156:</span> <span class="f">#</span><span class="n">else</span>
<a name="157" /><span class="True">     157:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlNb2R1bGVfQ3JlYXRlXzA_"><span class="b">PyModule_Create</span></a><span class="f">(</span><span class="b">module</span><span class="f">)</span> \
<a name="158" /><span class="True">     158:</span>         <a href="macros_ref.html#_UHlNb2R1bGVfQ3JlYXRlMl8w"><span class="b">PyModule_Create2</span></a><span class="f">(</span><span class="b">module</span><span class="f">,</span> <a href="macros_noref.html#_UFlUSE9OX0FQSV9WRVJTSU9OXzA_"><span class="b">PYTHON_API_VERSION</span></a><span class="f">)</span>
<a name="159" /><span class="True">     159:</span> <span class="f">#</span><span class="n">endif</span>
<a name="160" /><span class="True">     160:</span> 
<a name="161" /><span class="True">     161:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">Py_LIMITED_API</span><span class="f">)</span> <span class="f">||</span> <span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&gt;=</span> <span class="c">0x03050000</span>
<a name="162" /><span class="True">     162:</span> <span class="k">/* New in 3.5 */</span>
<a name="163" /><span class="True">     163:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <a href="macros_ref.html#_UHlNb2R1bGVfRnJvbURlZkFuZFNwZWMyXzA_"><span class="b">PyModule_FromDefAndSpec2</span></a><span class="f">(</span><span class="b">PyModuleDef</span> <span class="f">*</span><span class="b">def</span><span class="f">,</span>
<a name="164" /><span class="True">     164:</span>                                                 <span class="b">PyObject</span> <span class="f">*</span><span class="b">spec</span><span class="f">,</span>
<a name="165" /><span class="True">     165:</span>                                                 <span class="m">int</span> <span class="b">module_api_version</span><span class="f">)</span><span class="f">;</span>
<a name="166" /><span class="True">     166:</span> 
<a name="167" /><span class="False">     167:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">Py_LIMITED_API</span>
<a name="168" /><span class="False">     168:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlNb2R1bGVfRnJvbURlZkFuZFNwZWNfMA__"><span class="b">PyModule_FromDefAndSpec</span></a><span class="f">(</span><span class="b">module</span><span class="f">,</span> <span class="b">spec</span><span class="f">)</span> \
<a name="169" /><span class="False">     169:</span>     <a href="macros_ref.html#_UHlNb2R1bGVfRnJvbURlZkFuZFNwZWMyXzA_"><span class="b">PyModule_FromDefAndSpec2</span></a><span class="f">(</span><span class="b">module</span><span class="f">,</span> <span class="b">spec</span><span class="f">,</span> <a href="macros_noref.html#_UFlUSE9OX0FCSV9WRVJTSU9OXzA_"><span class="b">PYTHON_ABI_VERSION</span></a><span class="f">)</span>
<a name="170" /><span class="True">     170:</span> <span class="f">#</span><span class="n">else</span>
<a name="171" /><span class="True">     171:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlNb2R1bGVfRnJvbURlZkFuZFNwZWNfMA__"><span class="b">PyModule_FromDefAndSpec</span></a><span class="f">(</span><span class="b">module</span><span class="f">,</span> <span class="b">spec</span><span class="f">)</span> \
<a name="172" /><span class="True">     172:</span>     <a href="macros_ref.html#_UHlNb2R1bGVfRnJvbURlZkFuZFNwZWMyXzA_"><span class="b">PyModule_FromDefAndSpec2</span></a><span class="f">(</span><span class="b">module</span><span class="f">,</span> <span class="b">spec</span><span class="f">,</span> <a href="macros_noref.html#_UFlUSE9OX0FQSV9WRVJTSU9OXzA_"><span class="b">PYTHON_API_VERSION</span></a><span class="f">)</span>
<a name="173" /><span class="True">     173:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* Py_LIMITED_API */</span>
<a name="174" /><span class="True">     174:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* New in 3.5 */</span>
<a name="175" /><span class="True">     175:</span> 
<a name="176" /><span class="True">     176:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="177" /><span class="True">     177:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="f">)</span> <span class="b">_Py_PackageContext</span><span class="f">;</span>
<a name="178" /><span class="True">     178:</span> <span class="f">#</span><span class="n">endif</span>
<a name="179" /><span class="True">     179:</span> 
<a name="180" /><span class="False">     180:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="181" /><span class="False">     181:</span> <span class="f">}</span>
<a name="182" /><span class="True">     182:</span> <span class="f">#</span><span class="n">endif</span>
<a name="183" /><span class="True">     183:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_MODSUPPORT_H */</span>
<a name="184" /><span class="True">     184:</span> </pre>
  </body>
</html>
